
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<iostream>
#include "DSL.h"
using namespace std;

#pragma warning(disable : 4996)


int main() {
	DRSkip_List<int,int, int> s(9999,-9999);
	s.Insert_Node(15);
	s.Insert_Node(13);
	s.Insert_Node(11);
	s.Insert_Node(10);
	s.Insert_Node(20);
	s.Insert_Node(31);
	s.Insert_Node(23);
	s.Insert_Node(32);
	s.Insert_Node(35);
	s.Insert_Node(47);
	s.Insert_Node(45);
	s.Insert_Node(90);
	s.Insert_Node(14);
	s.Insert_Node(17);
	s.Insert_Node(21);
	s.Insert_Node(32);
	s.Insert_Node(34);
	s.Insert_Node(27);
	s.Insert_Node(56);
	s.Insert_Node(55);
	s.Insert_Node(54);
	s.Insert_Node(46);
	s.Insert_Node(80);
	cout << s.Key_By_Index(12);
	s.Insert_Node(22);


cout << s.Key_By_Index(0) <<" ";
cout << s.Key_By_Index(1) <<" ";
cout << s.Key_By_Index(2) <<" ";
cout << s.Key_By_Index(3) <<" ";
cout << s.Key_By_Index(4) <<" ";
cout << s.Key_By_Index(5) <<" ";
cout << s.Key_By_Index(6) <<" ";
cout << s.Key_By_Index(7) <<" ";
cout << s.Key_By_Index(8) <<" ";
cout << s.Key_By_Index(9) <<" ";
cout << s.Key_By_Index(10) <<" ";
cout << s.Key_By_Index(11) <<" ";
cout << s.Key_By_Index(12) <<" ";
cout << s.Key_By_Index(13) <<" ";
cout << s.Key_By_Index(14) <<" ";
cout << s.Key_By_Index(15) <<" ";
cout << s.Key_By_Index(16) <<" ";
cout << s.Key_By_Index(17) <<" ";
	cout << s.Key_By_Index(18) <<" ";
		cout << s.Key_By_Index(19) <<" ";
			cout << s.Key_By_Index(20) <<" ";
	cout << s.Key_By_Index(21) <<" ";
		cout << s.Key_By_Index(22) <<" ";
	cout << s.Key_By_Index(30) <<" ";

	s.Insert_Node(24);
	s.Insert_Node(25);

	//cout << (*(s.Node_By_Key(35))).key;
	cout << s.Index_By_Key(15);
	cout << s.Index_By_Key(21);
	cout << s.Index_By_Key(81);
	cout << s.Index_By_Key(34);
	cout << s.Index_By_Key(47);
	cout << s.Index_By_Key(20);
	cout << s.Index_By_Key(13);
	cout << s.Index_By_Key(10);
	cout << s.Index_By_Key(90);
	cout << s.Index_By_Key(9);
	cout << s.Index_By_Key(91);

	s.Remove_Node(15);
	s.Remove_Node(13);
	s.Remove_Node(11);
	s.Remove_Node(10);
	s.Remove_Node(20);
	s.Remove_Node(31);
	s.Remove_Node(23);
	s.Remove_Node(32);
	s.Remove_Node(35);
	s.Remove_Node(47);
	s.Remove_Node(45);
	s.Remove_Node(90);
	s.Remove_Node(14);
	s.Remove_Node(17);
	s.Remove_Node(21);
	s.Remove_Node(32);
	s.Remove_Node(34);
	s.Remove_Node(27);
	s.Remove_Node(56);
	s.Remove_Node(55);
	s.Remove_Node(54);
	s.Remove_Node(46);
	s.Remove_Node(80);
	s.Remove_Node(22);
	s.Remove_Node(24);
	s.Remove_Node(25);


		s.Insert_Node(27);
	s.Insert_Node(56);
	s.Insert_Node(55);
	s.Insert_Node(54);
	s.Insert_Node(46);
	s.Insert_Node(80);
	s.Insert_Node(22);
	s.Insert_Node(24);
	s.Insert_Node(25);




		s.test(54,3);
	s.Insert_Node(10);
	s.Insert_Node(20);
	s.test(20,3);
	s.Insert_Node(31);

		s.test(31,1);

	//s.Insert_Node(23);
	s.Insert_Node(32);
	s.Insert_Node(28);
			s.test(28,8);
	
		s.Insert_Node(14);
	s.Insert_Node(17);
	s.Insert_Node(28);
	cout << " " << s.Accumulated_By_Key(56);
	//system("pause");
	s.Remove_Node(45);
	s.Remove_Node(90);
	s.Remove_Node(14);
	s.Remove_Node(17);
	s.Remove_Node(21);
	s.Remove_Node(32);
	s.Remove_Node(46);
	s.Remove_Node(24);
	s.Remove_Node(55);

		s.Insert_Node(45);
	s.Insert_Node(90);
	s.Insert_Node(14);
	s.Insert_Node(17);
	s.Insert_Node(21);
	s.Insert_Node(32);
	s.Insert_Node(46);
	s.Insert_Node(24);
	s.Insert_Node(55);

		s.Insert_Node(17);
	s.Insert_Node(28);
	cout << " " << s.Accumulated_By_Key(56);

		s.test(54,-3);
	s.Insert_Node(10);
	s.Insert_Node(20);
		s.test(20,-3);
	s.Insert_Node(31);
		s.test(31,-1);

	//s.Insert_Node(23);
	s.Insert_Node(32);
	s.Insert_Node(28);
			s.test(28,-8);
		s.Insert_Node(28);

	//	s.test(31,1);
	//s.test(28,8);
	//s.test(54,3);
	//s.test(25,2);
	//s.Insert_Node(28);
	//cout << " " << s.Accumulated_Int(25);


	//s.Insert_Node(32);
	//s.Remove_Node(34);
	//s.Remove_Node(11);
	//s.Remove_Node(27);
	//s.Remove_Node(14);
	//s.Remove_Node(150);
	//s.Remove_Node(17);
	//s.Remove_Node(30);
	//s.Remove_Node(46);
	//s.Remove_Node(145);

	//s.Insert_Node(17);
	//s.Insert_Node(2);
	//cout << s.start->key<< " ";
	//cout << s.start->right->key << " ";
	//cout << s.start->right->right->key<< " ";
	//cout << (s.add_node(s.start,1,100))->key<< " ";


	//cout << s.start->down->right->right->key << "d\n";
	//SL_RESULT res = s.Find_Node(42, c);
	//cout << res <<"\n";
	system("pause");
	return 0;
}

